/*
 * 文件名：BaseEntity.java
 * 版权： 航天恒星科技有限公司
 * 描述：〈描述〉
 * 修改时间：2015年6月4日
 * 修改内容：〈修改内容〉
 */
package com.zmkm.project.dbserver.utils;

import java.io.Serializable;
import java.util.Date;

import com.zmkm.project.dbserver.constant.CommonContant;

/**
 * 〈一句话功能简述〉基础实体 〈功能详细描述〉需业务实体继承此类，实现getBaseEntity调用toString方法
 * 
 * @author chenl
 * @version [版本号, 2015年6月23日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public abstract class BaseEntity implements IBaseEntity, Serializable
{
    
    /** 序列化版本号 */
    private static final long serialVersionUID = -879498072774914353L;
    
    /** toString 样式 */
    private StringBuilder toStringStyle;
    
    /** ID */
    private String id;
    
    /** 创建人 */
    private String createBy;
    
    /** 创建时间 */
    private Date createTime;
    
    /** 修改人 */
    private String updateBy;
    
    /** 修改时间 */
    private Date updateTime;
    
    /** 移除标志(0未删除，1删除) */
    private String remove;
    
    /**
     * {@inheritDoc}
     */
    public String getId()
    {
        return id;
    }
    
    /**
     * {@inheritDoc}
     */
    public void setId(String id)
    {
        this.id = id;
    }
    
    /**
     * 〈一句话功能简述〉获得创建人信息 〈功能详细描述〉
     * 
     * @return 创建人信息
     * @see [类、类#方法、类#成员]
     */
    public String getCreateBy()
    {
        return createBy;
    }
    
    /**
     * 〈一句话功能简述〉设置创建人信息 〈功能详细描述〉
     * 
     * @param createBy 创建人信息
     * @see [类、类#方法、类#成员]
     */
    public void setCreateBy(String createBy)
    {
        this.createBy = createBy;
    }
    
    /**
     * 〈一句话功能简述〉获取创建时间 〈功能详细描述〉
     * 
     * @return 创建时间
     * @see [类、类#方法、类#成员]
     */
    public Date getCreateTime()
    {
        return createTime;
    }
    
    /**
     * 〈一句话功能简述〉设置创建时间 〈功能详细描述〉
     * 
     * @param createTime 创建时间
     * @see [类、类#方法、类#成员]
     */
    public void setCreateTime(Date createTime)
    {
        this.createTime = createTime;
    }
    
    /**
     * 〈一句话功能简述〉获取更新人 〈功能详细描述〉
     * 
     * @return 更新人
     * @see [类、类#方法、类#成员]
     */
    public String getUpdateBy()
    {
        return updateBy;
    }
    
    /**
     * 〈一句话功能简述〉设置更新人 〈功能详细描述〉
     * 
     * @param updateBy 更新人
     * @see [类、类#方法、类#成员]
     */
    public void setUpdateBy(String updateBy)
    {
        this.updateBy = updateBy;
    }
    
    /**
     * 〈一句话功能简述〉获得更新时间 〈功能详细描述〉
     * 
     * @return 更新时间
     * @see [类、类#方法、类#成员]
     */
    public Date getUpdateTime()
    {
        return updateTime;
    }
    
    /**
     * 〈一句话功能简述〉设置更新时间 〈功能详细描述〉
     * 
     * @param updateTime 更新时间
     * @see [类、类#方法、类#成员]
     */
    public void setUpdateTime(Date updateTime)
    {
        this.updateTime = updateTime;
    }
    
    /**
     * 〈一句话功能简述〉获取逻辑删除值 〈功能详细描述〉
     * 
     * @return 逻辑删除值
     * @see [类、类#方法、类#成员]
     */
    public String getRemove()
    {
        return remove;
    }
    
    /**
     * 〈一句话功能简述〉设置逻辑删除值 〈功能详细描述〉
     * 
     * @param remove 逻辑删除值
     * @see [类、类#方法、类#成员]
     */
    public void setRemove(String remove)
    {
        this.remove = remove;
    }
    
    /**
     * 
     * 〈一句话功能简述〉必须使用 StringBuilder 对象 〈功能详细描述〉
     * 
     * @return toString最终结果
     * @see [类、类#方法、类#成员]
     */
    public String toString()
    {
        addKVFieldStyles("id", id).addKVFieldStyles("remove", remove);
        
        return toStringStyle.append(CommonContant.SYSTEM_CONTANT_BLANK)
            .append(CommonContant.SYSTEM_CONTANT_BRACKETS_RIGHT)
            .toString();
    }
    
    /**
     * {@inheritDoc}
     */
    public IBaseEntity addKVFieldStyles(String fieldName, Object value)
    {
        
        if (toStringStyle == null)
        {
            toStringStyle =
                new StringBuilder(getBaseEntity().getClass().getName()).append(CommonContant.SYSTEM_CONTANT_BRACKETS_LEFT)
                    .append(CommonContant.SYSTEM_CONTANT_BLANK)
                    .append(fieldName)
                    .append(CommonContant.SYSTEM_CONTANT_EQUALS)
                    .append(value);
        }
        else
        {
            toStringStyle.append(CommonContant.SYSTEM_CONTANT_COMMA)
                .append(CommonContant.SYSTEM_CONTANT_BLANK)
                .append(fieldName)
                .append(CommonContant.SYSTEM_CONTANT_EQUALS)
                .append(value);
        }
        
        return this;
    }
    
    /**
     * 
     * 〈一句话功能简述〉 获取当前子类对象 〈功能详细描述〉
     * 
     * @return 当前继承类
     * @see [类、类#方法、类#成员]
     */
    protected abstract Object getBaseEntity();
}
